#include <stdio.h>
#include <malloc.h>
#include "fila.h"

int main(void)
{
	/* ----------------------------------------------------------------------
      DeclaraÃ§Ãµes e inÃ­cio para verificaÃ§Ã£o do uso da memÃ³ria dinÃ¢mica.
      ---------------------------------------------------------------------- */
   struct mallinfo info = mallinfo();
   int MemDinInicial = info.uordblks, MemDinFinal;
   /* ---------------------------------------------------------------------- */

	ListaOrdenada *p;
	Imagem *img=NULL;
   	Imagem *rotulo=NULL;
   	char nome[100];
   	int num_pontos, i, col, lin;

	p = (ListaOrdenada *)MontaListaOrdenada();
	imprime(p);

	fscanf(stdin,"%s",nome);
   	img = le_imagem(nome);

  	 if(img!=NULL){
      	rotulo = cria_imagem(img->ncols,img->nlins);

		 if(rotulo!=NULL){
		    fscanf(stdin,"%d",&num_pontos);
		    for (i=0;i<num_pontos;i++){
		 	     fscanf(stdin,"%d %d",&col,&lin);
		    		if(pixel_valido(img, col, lin))
		          rotulo->val[rotulo->lin[lin] + col] = i+1;  
		    }
		   	/* insere os marcadores iniciais na fila ordenada */
			IniciaFila(&img,&rotulo,p,0);
			/* imprime a fila ordenada para testar se os marcadores ja estao na fila, com as informacoes certas (prioridade e indice no vetor) */
		    	imprime(p);
			/* teste do para ver os pontos dos marcadores */
		 	imprime_imagem(img, stdout);
		    	imprime_imagem(rotulo, stdout);
		    	destroi_imagem(&rotulo);
		}
     	destroi_imagem(&img);
   	}

	LiberaListaOrdenada(p);

	/* --------------------------------------------------------------------- */
   	/* VerificaÃ§Ã£o final do uso da memÃ³ria dinÃ¢mica                          */
   	/* --------------------------------------------------------------------- */
	   info = mallinfo();
	   MemDinFinal = info.uordblks;
	   if (MemDinInicial!=MemDinFinal)
		 printf("\n\nMemÃ³ria dinÃ¢mica nÃ£o foi totalmente liberada (%d, %d)\n",
			MemDinInicial,MemDinFinal);
	   /* --------------------------------------------------------------------- */

	return 0;
}
